Pointer 到底是個什麼東東呢?指標?指引?位址?指針?
目前為止提到的變數都很單純 int float string bool ... 等等
那麼 ... Pointer 又是如何呢?來看看 wiki 的解說:
計算機概論告訴我們,指標(Pointer)是程式語言中的一類資料類型及其物件或變數,用來表示或儲存一個記憶體位址,這個位址的值直接指向(points to)存在「該位址的物件」的值。
就像我知道霍格華茲的地址是 蘇格蘭OOOO路OO號
但我並「不知道」它確切位置到底在哪
Go 支援指標 (pointer),在學習 coding 的過程中,指標是必經的門檻、無可避免的
but ... 對沒接觸過的人來說,指標不是那麼的容易理解,常因誤用指標而造成 segment fault(記憶體區段錯誤) … 等錯誤。對 golang 來說就是不斷的 panic 然後又 panic 一直在 panic
golang 的指標(pointer)比較簡化,不僅沒有指標運算,也不需要手動控制記憶體釋放。
package main
import "fmt"
type House struct {
Name string
Price int
}
func (c House) GetPrice() {
fmt.Println(c.Price)
}
func main() {
h := &House{"Dibao", 100000000}
h.GetPrice()
}
宣告變數 h 為 一個 struct , type 為 House
h 裡的 name 為 Dibao
Price 為 100000000
上面是個單純的 Go struct 例子,只有單純的撈出 struct 中的某個值
使用到保留字 type struct
那 ... 如果我想要動態更新 Price 值,要怎麼做呢?
package main
import "fmt"
type House struct {
Name string
Price int
}
func (c House) GetPrice() {
fmt.Println("price:", c.Price)
}
func (c House) UpdatePrice(price int) {
c.Price = price
}
func main() {
h := &House{"Dibao", 100000000}
h.GetPrice()
h.UpdatePrice(10000)
h.GetPrice()
}
上面可以看到輸出的結果仍然是 100000000,只用 value 傳值是無法改變 Struce 內成員的。我們可以用另外方式繞過。
經過 c.UpdatePrice(10000) 後
c.GetPrice()印出來的仍然是 100000000
(變成一萬我還不買爆)